#ifndef __SocketEventMonitor_h__
#define __SocketEventMonitor_h__

#include "../base/types.h"

namespace Greatewall
{
    namespace Interface
    {
        class SystemSocket;

        class SocketEventMonitor
        {
        public:
            enum SocketEventType
            {
                IN      = 1 << 0,
                OUT     = 1 << 1,
                INOUT   = IN | OUT,
                NONE    = 0
            };

            virtual bool
            registerSocket(SystemSocket* sock, SocketEventType event_type) = 0;

            virtual bool
            unregisterSocket(SystemSocket* sock) = 0;

            virtual void
            run() = 0;
        };
    }
}

#endif
